package com.smile.convert;

import com.smile.model.response.response.ShowMenuListResponseDto;
import com.smile.model.response.ShowMenuListResponse;

import java.util.ArrayList;
import java.util.List;

public class MenuTreeConverter {

    /**
     * 将 DTO 节点转换为 Response 节点（包含子树）
     *
     * @param dtoNode DTO节点
     * @return 转换后的Response节点
     */
    public static ShowMenuListResponse convertToResponse(ShowMenuListResponseDto dtoNode) {
        if (dtoNode == null) {
            return null;
        }

        ShowMenuListResponse responseNode = new ShowMenuListResponse();

        // 转换基础字段
        responseNode.setId(dtoNode.getId());
        responseNode.setMenuName(dtoNode.getMenuName());
        responseNode.setSort(dtoNode.getSort());
        responseNode.setModuleType(dtoNode.getModuleType());
        responseNode.setMenuType(dtoNode.getMenuType());

        // 处理 parentId（注意：ShowMenuListResponse 的 parentId 是 Integer 类型）
        if (dtoNode.getParentId() != null) {
            responseNode.setParentId(dtoNode.getParentId().intValue());
        } else {
            responseNode.setParentId(null);
        }

        // 递归转换子节点
        if (dtoNode.getChildren() != null && !dtoNode.getChildren().isEmpty()) {
            List<ShowMenuListResponse> childNodes = new ArrayList<>();
            for (ShowMenuListResponseDto childDto : dtoNode.getChildren()) {
                childNodes.add(convertToResponse(childDto));
            }
            responseNode.setChildren(childNodes);
        }

        return responseNode;
    }

    /**
     * 将 DTO 树形列表转换为 Response 树形列表
     *
     * @param dtoList DTO树形列表
     * @return 转换后的Response树形列表
     */
    public static List<ShowMenuListResponse> convertListToResponse(List<ShowMenuListResponseDto> dtoList) {
        List<ShowMenuListResponse> responseList = new ArrayList<>();
        if (dtoList == null || dtoList.isEmpty()) {
            return responseList;
        }

        for (ShowMenuListResponseDto dtoNode : dtoList) {
            responseList.add(convertToResponse(dtoNode));
        }

        return responseList;
    }

    /**
     * 将 Response 节点转换为 DTO 节点（包含子树）
     *
     * @param responseNode Response节点
     * @return 转换后的DTO节点
     */
    public static ShowMenuListResponseDto convertToDto(ShowMenuListResponse responseNode) {
        if (responseNode == null) {
            return null;
        }

        ShowMenuListResponseDto dtoNode = new ShowMenuListResponseDto();

        // 转换基础字段
        dtoNode.setId(responseNode.getId());
        dtoNode.setMenuName(responseNode.getMenuName());
        dtoNode.setSort(responseNode.getSort());
        dtoNode.setModuleType(responseNode.getModuleType());
        dtoNode.setMenuType(responseNode.getMenuType());

        // 处理 parentId（注意：ShowMenuListResponseDto 的 parentId 是 Long 类型）
        if (responseNode.getParentId() != null) {
            dtoNode.setParentId(responseNode.getParentId().longValue());
        } else {
            dtoNode.setParentId(null);
        }

        // 递归转换子节点
        if (responseNode.getChildren() != null && !responseNode.getChildren().isEmpty()) {
            List<ShowMenuListResponseDto> childNodes = new ArrayList<>();
            for (ShowMenuListResponse childResponse : responseNode.getChildren()) {
                childNodes.add(convertToDto(childResponse));
            }
            dtoNode.setChildren(childNodes);
        }

        return dtoNode;
    }

    /**
     * 将 Response 树形列表转换为 DTO 树形列表
     *
     * @param responseList Response树形列表
     * @return 转换后的DTO树形列表
     */
    public static List<ShowMenuListResponseDto> convertListToDto(List<ShowMenuListResponse> responseList) {
        List<ShowMenuListResponseDto> dtoList = new ArrayList<>();
        if (responseList == null || responseList.isEmpty()) {
            return dtoList;
        }

        for (ShowMenuListResponse responseNode : responseList) {
            dtoList.add(convertToDto(responseNode));
        }

        return dtoList;
    }
}
